package net.homelinux.chaoswg.io.renga.core.gui.operations.factories;

import net.homelinux.chaoswg.io.higherorderfunctions.AbstractTernaryFunction;
import net.homelinux.chaoswg.io.higherorderfunctions.ConstantFunction;
import net.homelinux.chaoswg.io.higherorderfunctions.NAryFunction;
import net.homelinux.chaoswg.io.higherorderfunctions.TernaryFunction;
import net.homelinux.chaoswg.io.renga.core.animations.Animation;
import net.homelinux.chaoswg.io.renga.core.gui.operations.Operation;
import net.homelinux.chaoswg.io.renga.core.gui.operations.PrimitiveOperation;
import net.homelinux.chaoswg.io.renga.core.gui.operations.visualisations.Visualisation;

public class PrimitiveOperationFactory extends AbstractTernaryFunction<Operation, ConstantFunction<? extends NAryFunction>, ConstantFunction<? extends Animation>, ConstantFunction<? extends Visualisation>> implements TernaryFunction<Operation, ConstantFunction<? extends NAryFunction>, ConstantFunction<? extends Animation>, ConstantFunction<? extends Visualisation>> {
    public Operation apply (final ConstantFunction<? extends NAryFunction> function, final ConstantFunction<? extends Animation> animation, final ConstantFunction<? extends Visualisation> visualisation) {
        return new PrimitiveOperation (function.apply (), animation.apply(), visualisation.apply());
    }

}
